import pandas as pd

# 读取表格1和表格2
df1 = pd.read_excel('D://laiyifen//1.xlsx')
df2 = pd.read_excel('D://laiyifen//2.xlsx')

# 创建表格3的初始结构
columns3 = [
    '费用使用方', '费用名称', '数量', '单价（元）', '总计（元）', '备注', '账单确认人',
    '门店名称', '所属子公司', '地区', '门店性质（直营/加盟）', '服务商', '服务商代码',
    '核算组织代码', '成本中心代码', '工单号'
]

# 1. 把表格1中的信息填入到表格3
# 确保表格1的列名与表格3的列名一致
df1 = df1[columns3]
df3 = df1.copy()

# 2. 把表格2中符合条件的行填充到表格3
# 确保表格2的列名与表格3的列名一致
# 为表格2添加缺失的列
missing_columns = [col for col in columns3 if col not in df2.columns]
for col in missing_columns:
    df2[col] = None  # 添加缺失的列并填充为空值

# 简化地区列名称
def simplify_region(region):
    if pd.notna(region):
        region = str(region)
        # 去掉特定省份的“省”字
        region = region.replace('江苏省', '江苏').replace('安徽省', '安徽').replace('辽宁省', '辽宁').replace('吉林省', '吉林')
        region = region.replace('云南省', '云南').replace('黑龙江省', '黑龙江').replace('贵州省', '贵州').replace('海南省', '海南')
        region = region.replace('青海省', '青海').replace('甘肃省', '甘肃')
        # 简化自治区名称
        region = region.replace('内蒙古自治区', '内蒙古').replace('西藏自治区', '西藏').replace('宁夏回族自治区', '宁夏').replace('新疆维吾尔自治区', '新疆')
    return region

# 应用简化地区名称的函数到df2
df3['地区'] = df3['地区'].apply(simplify_region)
df2['地区'] = df2['地区'].apply(simplify_region)

# 筛选条件：门店状态为"正常交易"或"正常营业"，门店性质为"直营"
condition1 = (df2['门店状态'].isin(['正常交易', '正常营业'])) & (df2['门店性质（直营/加盟）'] == '直营')
df2_subset1 = df2[condition1].copy()

# 设置费用名称为"技术服务"
df2_subset1['费用名称'] = '技术服务'

# 3. 筛选条件：门店状态为"正常交易"或"正常营业"，门店性质为"直营"或"加盟"
condition2 = (df2['门店状态'].isin(['正常交易', '正常营业'])) & (df2['门店性质（直营/加盟）'].isin(['直营', '加盟']))
df2_subset2 = df2[condition2].copy()

# 设置费用名称为"项目管理"
df2_subset2['费用名称'] = '项目管理'

# 4. 设置数量列全部为1
df2_subset1['数量'] = 1
df2_subset2['数量'] = 1

# 5. 根据费用名称设置单价和总计
def set_price(row):
    if row['费用名称'] == '开闭店服务':
        return '295/店/次', 295
    elif row['费用名称'] == '科技A类现场':
        return '216元/次', 216
    elif row['费用名称'] == 'A类现场':
        return '216元/次', 216
    elif row['费用名称'] == '科技B类现场':
        return '280/店/次', 280
    elif row['费用名称'] == 'B类现场':
        return '280/店/次', 280
    elif row['费用名称'] == '技术服务':
        return '5.75/店/月', 5.75
    elif row['费用名称'] == '项目管理':
        return '6.08/店/月', 6.08
    else:
        return None, None

# 应用价格设置
df2_subset1[['单价（元）', '总计（元）']] = df2_subset1.apply(set_price, axis=1, result_type='expand')
df2_subset2[['单价（元）', '总计（元）']] = df2_subset2.apply(set_price, axis=1, result_type='expand')

# 6. 设置备注和账单确认人为空
df2_subset1['备注'] = None
df2_subset1['账单确认人'] = None
df2_subset2['备注'] = None
df2_subset2['账单确认人'] = None

# 7. 填写门店名称、所属子公司、地区、门店性质（直营/加盟）
# 这些列已经在筛选后的数据中存在，无需额外处理

# 8. 设置服务商和服务商代码
df2_subset1['服务商'] = '联想'
df2_subset1['服务商代码'] = None
df2_subset2['服务商'] = '联想'
df2_subset2['服务商代码'] = None

# 9. 填写核算组织代码、成本中心代码、工单号
# 这些列已经在筛选后的数据中存在，无需额外处理

# 选择需要的列
df2_subset1 = df2_subset1[columns3]
df2_subset2 = df2_subset2[columns3]

# 将表格2的两部分数据合并到表格3
df3 = pd.concat([df3, df2_subset1, df2_subset2], ignore_index=True)

# 删除服务商代码列中的所有内容
df3['服务商代码'] = None

# 创建一个包含开闭店服务的费用使用方的列表
open_close_fees = df3[df3['费用名称'] == '开闭店服务']['费用使用方'].unique()

# 删除对应技术服务和项目管理的收费
for fee in open_close_fees:
    df3 = df3[~((df3['费用使用方'] == fee) & (df3['费用名称'].isin(['技术服务', '项目管理'])))]


# 填充所属子公司列
for index, row in df3.iterrows():
    store_nature = row['门店性质（直营/加盟）']
    if store_nature == '直营':
        df3.at[index, '所属子公司'] = df2.loc[df2['费用使用方'] == row['费用使用方'], '所属子公司-直营'].values[0]
    elif store_nature == '加盟':
        df3.at[index, '所属子公司'] = df2.loc[df2['费用使用方'] == row['费用使用方'], '所属子公司-加盟'].values[0]

# 创建ExcelWriter对象
with pd.ExcelWriter('D://laiyifen//3.xlsx') as writer:
    # 将Sheet1重命名为服务付款申请单
    df3.to_excel(writer, sheet_name='服务付款申请单', index=False)

    # 创建Sheet2命名为验证，为空表
    pd.DataFrame().to_excel(writer, sheet_name='验证', index=False)

    # 创建Sheet3命名为A类现场明细
    a_class = df3[df3['费用名称'].isin(['A类现场', '科技A类现场'])]
    a_class.to_excel(writer, sheet_name='A类现场明细', index=False)

    # 创建Sheet4命名为B类现场明细
    b_class = df3[df3['费用名称'].isin(['B类现场', '科技B类现场'])]
    b_class.to_excel(writer, sheet_name='B类现场明细', index=False)

    # 创建Sheet5命名为开闭店明细
    open_close = df3[df3['费用名称'] == '开闭店服务']
    open_close.to_excel(writer, sheet_name='开闭店明细', index=False)

    # 创建Sheet6命名为门店信息
    df2.to_excel(writer, sheet_name='门店信息', index=False)

print("表格3已成功创建！")